type EventPayload native;  // *qt.WebUiEventPayload (contains a C++ pointer)
type EventHandler native;  // *vdom.EventHandler

function EventHandler:[T]
    &(Sink[T], &(EventPayload) => T) => EventHandler
    native 'ui-dom-event-handler';

function getter-callback:[T]
    &(String, (&(EventPayload,String) => T), (&(T) => EventPayloadConsumer)) => EventPayloadConsumer
    &(prop,getter,k) => { |EventPayloadConsumer| &(ev) =>
        let val := { getter (ev,prop) },
        let next := { k val },
        { next(ev) } };

function get-string:
    &(EventPayload, String) => String
    native 'ui-event-payload-get-string';
function get-float:
    &(EventPayload, String) => NormalFloat
    native 'ui-event-payload-get-float';
function get-integer:
    &(EventPayload, String) => Integer
    native 'ui-event-payload-get-integer';
function get-bool:
    &(EventPayload, String) => Bool
    native 'ui-event-payload-get-bool';

